Linked-list interlineation of data

ABSTRACT

In one embodiment, linked-list interlineation of data in accordance with the present description includes inserting a subsequent set of data in a linked-list data structure within an initial data structure. The linked-list data structure includes a sequence of linked-list entries interspersed with the initial data of the initial data structure. To insert the subsequent data, a pattern of data within the initial data structure is replaced with data of the subsequent set of data in a sequence of linked-list entries of the linked-list data structure. Other aspects are described herein.

TECHNICAL FIELD

Certain embodiments of the present description relate generally tomanagement of memory resources.

BACKGROUND

In contrast to volatile memory, non-volatile memory can store data thatpersists even after the power is removed from the non-volatile memory.However, in some types of non-volatile memory such as non-volatile flashmemory, a write operation may change a bit of memory in only onedirection, such as from a logical one state to a logical zero state, forexample, without first erasing the particular bit of memory. Thus if azero is written to a particular bit, that bit may not be changed back toa one state by another write operation. Instead, the bit is first“erased” which changes the bit back to a one state. After the bit iserased, a zero may be written to the erased bit.

Another limitation of some types of non-volatile memory such as flashmemory, is that data can only be erased an entire block of memorylocations at a time. As a result, instead of erasing a bit, byte or wordof data at a time, an entire block encompassing many sectors or pages ofdata depending upon the size of the block of data, is erased at a time.Still further, such non-volatile memory typically has a limitation onthe number of times a particular block of memory may be erased beforethe block “wears out” and loses the ability to reliably store data.

BRIEF DESCRIPTION OF THE DRAWINGS

Embodiments of the present disclosure are illustrated by way of example,and not by way of limitation, in the figures of the accompanyingdrawings in which like reference numerals refer to similar elements.

FIG. 1 depicts a high-level block diagram illustrating one embodiment ofa system employing linked-list interlineation of data in accordance withthe present description.

FIG. 2 depicts a basic architecture of a memory employing linked-listinterlineation of data in accordance with the present description.

FIGS. 3a-3c depict various hierarchical levels of data storage of thememory of FIG. 2.

FIG. 4 depicts an embodiment of operations of linked-list interlineationof data in accordance with the present description.

FIGS. 5a-5d depict various stages of linked-list data structures beingstored in a sector of memory in accordance with one example oflinked-list interlineation of data in accordance with the presentdescription.

FIG. 5e depicts an example of fields within a payload field of an entryof a linked-list data structure in accordance with one example oflinked-list interlineation of data in accordance with the presentdescription.

FIG. 6 depicts another embodiment of operations of linked-listinterlineation of data in accordance with the present description.

FIG. 7 depicts yet another embodiment of operations of linked-listinterlineation of data in accordance with the present description.

DESCRIPTION OF EMBODIMENTS

In the description that follows, like components have been given thesame reference numerals, regardless of whether they are shown indifferent embodiments. To illustrate one or more embodiments of thepresent disclosure in a clear and concise manner, the drawings may notnecessarily be to scale and certain features may be shown in somewhatschematic form. Features that are described or illustrated with respectto one embodiment may be used in the same way or in a similar way in oneor more other embodiments or in combination with or instead of featuresof other embodiments.

In various known computer systems including portable devices such ascellular phones often referred to as “smart phones”, for example, datais received from various subsystems of the overall system such ascentral processing, input/output, storage, audio, video, display, andbattery subsystems, for example, and the data is stored in memory. Asthe data is received from the various subsystems, the data is frequentlystored in non-volatile memory in subsections of the non-volatile memoryoften referred to as “sectors.” If the received data is larger than asector in size, the received data may be subdivided into “chunks”wherein each full-size chunk of data has the size of a sector. Eachfull-size chunk of data is stored in a corresponding sector and fillsthat sector except for those types of memory having an error correctioncode (ECC) field which is reserved for error correction code dataencoding the data of the sector for error detection and correctionpurposes and other possible uses as well. If the received data issmaller than a sector in size, it is typically padded with one-bits upto the sector size and this data is written to an empty sector includingthe padded bits and the ECC data calculated on the whole sector. In thismanner, typically only one update is written to a sector, such that thenext update is written to the next sector etc.

As previously mentioned, known non-volatile memory devices such as NANDand NOR flash memory for example, frequently have a limitation in whichmemory is erased a block at a time, rather than a sector (or word, byteetc.) at a time. Accordingly, previously stored data is typically notchanged in known systems employing such memory without erasing an entireblock of data. Moreover, if the previously stored data has been encodedin an error correction code, the error correction code stored in thesector also is not changed to reflect the new data. As a result, if thereceived data is an update (that is, a later version) of previouslyreceived and stored data, in known systems the update data is typicallystored in new memory locations which have previously been erased toavoid erasing an entire block of data just to change a portion of thedata previously stored. In this manner, the new data is appended in newmemory locations to the prior data already stored rather than erasing anentire block of data. However, once a block of sectors becomes full, thelatest versions of data stored in that block are copied over to sectorsin a new block of sectors and the original block of sectors is erased.

It is recognized herein that received update data may differ from aprior version of data stored in a sector by only a few bits. However,because the previous version of the data and the error correction codestored in a sector typically cannot be changed without erasing an entireblock of sectors, in known systems having such limitations, slightlychanged update data is stored in a new sector rather than updating theoriginal sector. As a result, it is appreciated that small changes inupdate data can cause sectors and ultimately blocks of memory to berapidly filled and erased notwithstanding that relatively little newdata is being received. Consequently, it is appreciated that blocks ofmemory in known systems have been erased and rewritten at a rate whichmay cause premature wearing out of those blocks of memory.

In one aspect of the present description, linked-list interlineation ofdata is employed in a system of one or more computers configured toperform particular operations or actions of linked-list interlineationof data by virtue of having software, firmware, hardware, or acombination of them installed on the system that in operation causes orcause the system to perform the actions. One or more computer programscan be configured to perform particular operations or actions oflinked-list interlineation of data by virtue of including instructionsthat, when executed by data processing apparatus, cause the apparatus toperform the actions.

One general aspect of linked-list interlineation of data in accordancewith the present description includes linked-list interlineation logicconfigured to store a subsequent set of data within memory locations inwhich an initial set of data has already been stored. In one embodiment,the subsequent set of data which may be referred to as “update data”,for example, may be stored interlineated and interspersed amongst thepreviously stored initial set of data without first erasing the sectorcontaining the initial set of data. As a result, the frequency oferasing blocks of memory may be reduced so as to extend the life of thememory.

In one embodiment, a linked-list interlineation logic includes patternrecognition logic configured to identify a particular pattern ofpreviously stored data (referred to herein as a “first pattern” of data)which may be interspersed among the data of the initial set of dataalready stored in the memory sector. For example, the pattern of datamay be a string of ones which may be determined to be stored in a subsetof memory locations interspersed within the initial set of memorylocations storing the initial set of data in the memory sector. In oneaspect of linked-list interlineation of data in accordance with thepresent description, one or more instances of the first pattern of datamay be replaced with data of the subsequent set of data. In thoseembodiments in which the first pattern of data is a string of ones (0xFF(hexadecimal)), for example, it is appreciated that such a string may bereadily replaced with data of the subsequent set without first erasingthe memory sector since bits may be changed from a one state to a zerostate without first erasing the bit in various types of flash memory,for example. Similarly, bits may remain in the logical one state asappropriate without first erasing the bit.

Accordingly, pattern recognition logic of the linked-list interlineationlogic may be configured to identify a subset of memory locations withinthe initial set of memory locations, as a function of at least a firstpattern of data wherein the memory locations of the subset of memorylocations may be interspersed with other memory locations of the initialset of memory locations. Further, data replacement logic of thelinked-list interlineation logic, may be configured to replace data ofat least the first pattern of data stored in the subset of memorylocations with a subsequent set of data. As explained in greater detailbelow, in one embodiment, the subsequent set of data may be storedinterspersed within the initial set of data, in a linked-list datastructure having a sequence of linked-list entries. Linked-listgeneration logic of the linked-list interlineation logic may beconfigured to generate a sequence of linked-list entries to store thesubsequent set of data. In one embodiment, each entry of the sequence oflinked-list entries may include one or more fields such as header, errorcorrection code, payload, sequence length and pointer location fields asdescribed in greater detail below. Additional sets of update data may bestored in the same sector in additional sequences of linked-list entriesin a similar manner. Other embodiments of this aspect includecorresponding computer systems, apparatus, and computer programsrecorded on one or more computer storage devices, each configured toperform the actions of the methods.

In another aspect of linked-list interlineation in accordance with thepresent description, the subsequent set of data stored in a sectorinterlineated with the initial set of data may be readily read anddistinguished from the initial set of data. Accordingly, linked-listinterlineation logic is configured to read the fields of an entry of asequence of linked-list entries in which the fields may include forexample, a header field, and a payload field storing at least a portionof the data of the subsequent set of data. A pointer location fieldstores the location of the next-in-sequence entry of the sequence oflinked-list entries storing the subsequent set of data.

The sequence of linked-list entries may be traversed in this manner,using the pointer location field of each entry to identify and read thenext-in-sequence entry of the sequence of linked-list entries storingthe subsequent set of data. A sequence length field of an entry of thesequence of linked-list entries may be provided to indicate the totallength of all the entries of the sequence of linked-list entries andthus may be utilized to determine when the entire sequence oflinked-list entries storing the subsequent set of data has been located.One or more of the entries of the sequence of linked-list entries mayalso include an error correction code field to store error correctioncode data for purposes of detecting and correcting storage or readerrors of the sequence of linked-list entries. Additional sets of updatedata may be read from the same sector which have been stored inadditional sequences of linked-list entries in a similar manner.

It is noted that ECC data can be used both for fault detection and forpower loss detection. Accordingly, if the ECC data does not correspondto the data on which it was calculated, an indication is provided thatthere may have been a power loss or that an error occurred in the memoryhardware device. In the event that the discrepancy is determined to bethe result of a power loss, the update containing the discrepancy may insome embodiments be entirely disregarded. However, if the power lossoccurred during the calculation and storage of the ECC data, the updateportion of the data successfully stored prior to the power loss may insome instances, be considered to be sufficiently reliable to be of use.In still another aspect of linked-list interlineation in accordance withthe present description, the sector of data containing the sequences oflinked-list entries interspersed with the initial set of data, may beread and stored in a buffer. Each sequence of linked-list entriesstoring update data may be replaced in the buffer with the originalfirst pattern of data which restores the initial set of data of thesector to the state it was in at the time it was encoded with errorcorrection code data. Accordingly, the initial error correction codedata of the initial set of data stored in the sector may be applied forpurposes of detecting and correcting storage or read errors of theinitial set of data.

Implementations of the described techniques may include hardware, amethod or process, or computer software on a computer-accessible medium.In one embodiment, linked-list interlineation of a subsequent set ofdata in an initial set of data is described in connection with datastorage such as storing uncompressed data, for example. However, it isappreciated that linked-list interlineation may be applied to otherapplications as well. For example, linked-list interlineation may beapplied to data transmission and reception devices transmitting andreceiving data. Thus, in one example, a data transmission devicetransmitting a photograph which is digitally encoded, may employlinked-list interlineation in accordance with the present description toinsert or embed metadata in the photograph in one or more sequences oflinked-list entries, by recognizing and replacing patterns of bitsrepresenting an area of the original photograph with a sequence oflinked-list entries representing metadata which may describe propertiesof the photograph or the manner in which the photograph was taken, forexample.

It is appreciated that linked-list interlineation of data in accordancewith the present description may be applied to a variety of host,storage and other memory devices such as for example, memory devicesthat use chalcogenide phase change material (e.g., chalcogenide glass),three-dimensional (3D) crosspoint memory, or memory that incorporatesmemristor technology. Additional memory devices which may benefit fromlinked-list interlineation of data in accordance with the presentdescription may include other types of byte-addressable, write-in-placenon-volatile memory, ferroelectric transistor random-access memory(FeTRAM), nanowire-based non-volatile memory, Magnetoresistiverandom-access memory (MRAM), Spin Transfer Torque (STT)-MRAM, PhaseChange Memory (PCM), storage class memory (SCM), universal memory,Ge2Sb2Te5, programmable metallization cell (PMC), resistive memory(RRAM), RESET (amorphous) cell, SET (crystalline) cell, PCME, Ovshinskymemory, ferroelectric memory (also known as polymer memory andpoly(N-vinylcarbazole)), ferromagnetic memory (also known asSpintronics, SPRAIVI (spin-transfer torque RAM)), STRAM (spin tunnelingRAM), magnetic memory, magnetic random access memory (MRAM), andSemiconductor-oxide-nitride-oxidesemiconductor (SONOS, also known asdielectric memory). It is appreciated that other types of memory maybenefit from linked-list interlineation of data in accordance with thepresent description, depending upon the particular application.

Turning to the figures, FIG. 1 is a high-level block diagramillustrating selected aspects of a computing system implementedaccording to an embodiment of the present disclosure. System 10 mayrepresent any of a number of electronic or other computing devices, thatmay include a memory device. Such electronic devices may include atelephone modem and other computing devices such as a mainframe, server,personal computer, workstation, telephony device, network appliance,virtualization device, storage controller, portable or mobile devices(e.g., laptops, netbooks, tablet computers, personal digital assistant(PDAs), portable media players, portable gaming devices, digitalcameras, mobile phones, smartphones, feature phones, etc.) or component(e.g. system on a chip, processor, bridge, memory controller, memory,etc.). System 10 can be powered by a battery, renewable power source(e.g., solar panel), wireless charging, or by use of an AC outlet.

In alternative embodiments, system 10 may include more elements, fewerelements, and/or different elements. Moreover, although system 10 may bedepicted as comprising separate elements, it will be appreciated thatsuch elements may be integrated on to one platform, such as systems on achip (SoCs). In the illustrative example, system 10 comprises amicroprocessor 20, a memory controller 30, a memory 40 and peripheralcomponents 50 which may include, for example, video controller, inputdevice, output device, storage, network adapter, a power source(including a battery, renewable power source (e.g., photovoltaic panel),wireless charging, or coupling to an AC outlet), etc. The microprocessor20 includes a cache 25 that may be part of a memory hierarchy to storeinstructions and data, and the system memory 40 may also be part of thememory hierarchy. Communication between the microprocessor 20 and thememory 40 may be facilitated by the memory controller (or chipset) 30,which may also facilitate in communicating with the peripheralcomponents 50.

Peripheral components 50 which are storage devices may be, for example,non-volatile storage, such as solid-state drives (SSD), magnetic diskdrives, optical disk drives, a tape drive, flash memory, etc. Thestorage may comprise an internal storage device or an attached ornetwork accessible storage. The microprocessor 20 is configured to writedata in and read data from the memory 40. Programs in the storage areloaded into the memory and executed by the processor. A networkcontroller or adapter enables communication with a network, such as anEthernet, a Fiber Channel Arbitrated Loop, etc. Further, thearchitecture may, in certain embodiments, include a video controllerconfigured to display information represented by data in a memory on adisplay monitor, where the video controller may be embodied on a videocard or integrated on integrated circuit components mounted on amotherboard or other substrate. An input device is used to provide userinput to the processor, and may include a keyboard, mouse, pen-stylus,microphone, touch sensitive display screen, input pins, sockets, or anyother activation or input mechanism known in the art. An output deviceis capable of rendering information transmitted from the processor, orother component, such as a display monitor, printer, storage, outputpins, sockets, etc. The network adapter may embodied on a network card,such as a Peripheral Component Interconnect (PCI) card, PCI-express, orsome other I/O card, or on integrated circuit components mounted on amotherboard or other substrate. The peripheral devices 50 may alsoinclude RF receiver/transmitters such as in a mobile telephoneembodiment, for example. Additional examples of peripheral devices 50which may be provided in the system include an audio device andtemperature sensor to deliver temperature updates for storage in thememory.

One or more of the components of the device 10 may be omitted, dependingupon the particular application. For example, a network router may lacka video controller, for example.

Any one or more of the memory devices 25, 40, and the other devices 10,30, 50 may include a memory employing linked-list interlineation of datain accordance with the present description, or be embodied as any typeof data storage capable of storing data in a persistent manner (even ifpower is interrupted to non-volatile memory) such as but not limited toany combination of memory devices that use for example, chalcogenidephase change material (e.g., chalcogenide glass), three-dimensional (3D)crosspoint memory, or other types of byte-addressable, write-in-placenon-volatile memory, ferroelectric transistor random-access memory(FeTRAM), nanowire-based non-volatile memory, phase change memory (PCM),memory that incorporates memristor technology, Magnetoresistiverandom-access memory (MRAM) or another Spin Transfer Torque (STT)-MRAMas described above. Such memory elements in accordance with embodimentsdescribed herein can be used either in stand-alone memory circuits orlogic arrays, or can be embedded in microprocessors and/or digitalsignal processors (DSPs). Additionally, it is noted that althoughsystems and processes are described herein primarily with reference tomicroprocessor based systems in the illustrative examples, it will beappreciated that in view of the disclosure herein, certain aspects,architectures, and principles of the disclosure are equally applicableto other types of device memory and logic devices.

FIG. 2 shows an example of a memory 54 which may be employed as a hostmemory or storage employing linked-list interlineation of data inaccordance with the present description. The memory 54 has a rectangularor orthogonal array 60 of rows and columns of cells such as the bitcells64, in which each bitcell 64 is configured to store a bit state.

The array 60 of bitcells may be subdivided in an array of blocks 70(FIG. 3a ). Depending upon the size of the memory, the array 60 of bitcells may have tens, hundreds, thousands, or more of such blocks 70. Inthe illustrated embodiment, the memory 54 is a non-volatile memory suchas a flash memory, for example, in which each block 70 represents thesmallest subunit of the memory 54 which may be erased at one time.

Each block 70 may in turn be subdivided into an array of sectors 74(FIG. 3b ). Depending upon the size of the memory, a block 70 of sectors74 may have tens, hundreds, thousands, or more of such sectors 74. Eachsector 74 may in turn be subdivided into an array of memory locations 80(FIG. 3c ). Depending upon the size of the memory, a sector 74 of memorylocations 80 may have tens, hundreds, thousands, or more of such memorylocations 80. Each memory location includes one or more bitcells 64 tostore a bit, a byte, a word or other subunit of data, depending upon theparticular application. Although linked-list interlineation is describedin connection with storing data in a sector, it is appreciated thatother units of data storage such as pages, tracks, segments, files,volumes, disks, drives, etc., may be utilized, depending upon theparticular application.

The memory 54 may also include a row decoder, a timer device and I/Odevices (or I/O outputs). Bits of the same memory word may be separatedfrom each other for efficient I/O design. A multiplexer (MUX) may beused to connect each column to the required circuitry during a READoperation. Another MUX may be used to connect each column to a writedriver during a WRITE operation. A memory control logic 84 such as amemory controller is configured to control and perform read and writeoperations directed to the bitcells 64 as explained below. The memorycontrol logic 84 is configured to perform the described operations usingappropriate hardware, software or firmware, or various combinationsthereof. The hardware, software or firmware of the memory control logic84 may be physically or logically located in any component of the systemincluding the memory itself, a controller such as a memory controller, amicroprocessor, etc.

As explained in greater detail below, the memory control logic 84includes linked-list interlineation logic 86. In one embodiment, thememory control logic 84 further includes block erase logic 88 configuredto erase an erasable block 70 (FIG. 3a ) of the memory 54 at a time, anderror correction code logic 90 configured to generate error correctioncodes to be stored in the memory 54 for purposes of detecting andcorrecting read and storage errors in the memory 54. The block eraselogic 88 is configured to change all bits of an erasable block to acommon bit state (typically a logical one state) to erase an erasableblock of the non-volatile flash memory wherein an erasable block is thesmallest unit of the non-volatile memory capable of being erased at atime. Hardware components of the memory control logic 84 may be a partof the memory 54 as depicted in FIG. 2, or may be physically orlogically separate as indicated for the memory controller 30 withrespect to the memory 40 of FIG. 1.

In one embodiment, the linked-list interlineation logic 86 includespattern recognition logic 92 configured to recognize patterns of data,such as one or more strings of bits in the “one” state, such as one ormore strings of eight bits, wherein each eight bit string may berepresented as the hexadecimal value 0xFF, for example. Thus, the 0xFFhexadecimal pattern is a string of bits which are exclusively of acommon bit state, the logical one state in this example. It isappreciated that other patterns of data may be utilized in linked-listinterlineation in accordance with the present description, dependingupon the particular application. The linked-list interlineation logic 86further includes data replacement logic 94 configured to replacepatterns of data recognized by the pattern recognition logic 92, withone or more sequences of linked-list entries configured to storeadditional sets of data in a sector in which an initial set of data hasalready been stored. The entries of the sequences of linked-list entriesmay be generated by a linked-list entry generation logic 96 of thelinked-list interlineation logic 86.

FIG. 4 depicts one example of operations for linked-list interlineationin accordance with one embodiment of the present description, which maybe performed by the memory control logic 84, for example, which isconfigured to control input/output operations to a memory such as thememory 54, for example. In this example, the memory 54 (FIG. 2) hasmemory locations 80 (FIG. 3c ) configured to store data in one or morelinked-list data structures as described in greater detail below.

In the operations of FIG. 4, the memory control logic 84 is configuredto store (block 200, FIG. 4) an initial set of data in a data field 201(FIG. 5a ) of an initial data structure U1 having an initial set ofmemory locations 80 (FIG. 3c ) of the sector 74 (FIG. 5a ) of the memory54. In this embodiment, the data structure U1 is a sector 74. Althoughlinked-list interlineation in accordance with the present description isdescribed in connection with storing data in a sector, it is appreciatedthat other units of data storage such as pages, tracks, segments, files,volumes, disks, drives, etc., may be utilized, depending upon theparticular application.

In known systems, an error correction code data field 204 (FIG. 5a ) isfrequently reserved. In the embodiment of FIG. 5a , the data field 201occupies all or substantially all of the available space of the sector74 for data storage except the ECC field 204.

If the data received at one time is smaller than the field 201 in size,it is typically padded with one-bits to fill the field 201 in itsentirety such that the field 201 prior to linked-list interlineation inaccordance with the present description, typically contained just asingle set of data (including the pad bits added to the received data).Accordingly, an error correction code is calculated (block 208) for theentire field 201 containing the initial set of data (including pad bits)of the data structure U1, by error correction code logic such as theerror correction code logic 90 (FIG. 2) of the memory control logic 84.In one embodiment, the error correction code logic 90 is configured tocalculate the error correction code as a function of all the bits of thesector 74 previously stored in the sector 74 (with the possibleexception of the bits of the error correction code itself), and as such,the error correction code calculated for the initial data of the sectormay be referred to as a “sector-wide” error correction code. Oncecalculated, the memory control logic 84 is configured to store (block208, FIG. 4) the sector-wide error correction code data in the ECCreserved field 204 (FIG. 5a ) of the sector.

In the embodiment of FIG. 5a , the initial data structure U1 is depictedas occupying the entire sector 74 and having two fields 201, 204. It isappreciated however that a sector may have additional data structuresexternal or internal to the data structure U1 which may have additionalfields other than the fields 201, 204 as well. Accordingly, the errorcorrection code stored in the ECC field 204 may in some embodiments be afunction of a portion only of the data of the sector 74.

The error correction code logic 90 is further configured to detect andcorrect storage errors in the initial set of data as a function of theerror correction code data. Accordingly, should a read, write or storageerror be encountered in the initial set of data of the data structure U1read back from the sector, such an error may be detected and correctedutilizing the sector-wide error correction code stored in the reservedfield 204 for the sector. Thus, the entire storage capacity of thesector 74 including a reserved error correction code field 204 hastypically been utilized for data storage of an initial set of data ofthe data structure U1 and the sector-wide error correction code or inwhich most if not all of the storage capacity of the sector including areserved error correction code field has been utilized for data storageof an initial set of data of the data structure U1 including thesector-wide error correction code. Accordingly, once data storing (block200) has filled the sector to capacity or near capacity (block 202),with the initial set of data of the data structure U1, and thesector-wide error correction code is calculated and stored (block 208),known systems typically do not store further updates in the sector butinstead store the future updates in a sector not yet filled because thedata in the field 201 and the error correction code stored in the errorcorrection code field 204 is typically not erased and rewritten in knownsystems absent erasing an entire block of storage at a time. Aspreviously mentioned, such known storage practices may lead to prematurewearing out of the memory due to excessive filling and then erasing ofblocks of memory.

In one aspect of linked-list interlineation in accordance with thepresent description, it is recognized that the initial set of data ofthe data structure U1 filling the sector after the sector-wide ECC codehas been stored in the sector, typically includes a number of instancesof strings of bits exhibiting a particular pattern of data. It isfurther recognized herein that such strings of bits exhibiting aparticular pattern of data may be utilized to store yet another set ofdata interspersed with the initial set of data of the data structure U1,even after the sector has been “filled” with the initial set of data ofthe data structure U1 including the sector-wide ECC code which has beencalculated and stored in the field 204. One such pattern of data whichmay be utilized in linked-list interlineation in accordance with thepresent description is one or more strings of bits in the “one” state,such as one or more strings of eight bits, wherein each eight bit stringmay be represented as the hexadecimal value 0xFF. It is appreciated thatother patterns of data may be utilized in linked-list interlineation inaccordance with the present description, depending upon the particularapplication.

Accordingly, in that linked-list interlineation in accordance with thepresent description provides an opportunity to store additional data ina sector even after the sector has been “filled” (block 200) with theinitial set of data of the data structure U1 and the sector-wide ECCcode has been calculated based upon that initial set of data of the datastructure U1 and stored (block 208), a determination (block 210) is madewhether to store additional data in the sector 74. To store theadditional data in the “filled” sector, in this embodiment, the memorycontrol logic 84 (FIG. 2) includes linked-list interlineation logic 86configured to, after the memory control logic 84 stores the initial setof data in the sector 74, store within a subset of the initial set ofmemory locations storing the initial set of data of the data structureU1, a subsequent set of data which may be update data updating theinitial set of data of the data structure U1 which was previously stored(block 200).

To locate the subset of memory locations to store the additional data,the linked-list interlineation logic 86 includes pattern recognitionlogic 92 (FIG. 2) configured to identify (block 214, FIG. 4) a subset ofmemory locations within the initial set of memory locations storing theinitial set of data of the data structure U1, as a function of at leastthe first pattern of data which may be strings of eight ones (0xFF) inone embodiment as previously mentioned. The memory locations storing theparticular pattern of data are referred to herein as an “updateavailable space” since an instance of the pattern may be replaced withdata of the subsequent set of data being added to the sector. In oneembodiment, the pattern recognition logic 92 (FIG. 2) determines ifthere are sufficient update available spaces for storing the update. Ifnot, the sector may be skipped and another sector examined.

FIG. 5b shows an example of a subset of memory locations of the sector74, which have been recognized by the pattern recognition logic 92 (FIG.2) as storing the 0xFF pattern within the initial set of data stored inthe data field 201 of the data structure U1, and accordingly areindicated as update available spaces 212 a, 212 b, 212 c, 212 d, 212 e,212 f, 212 g, 212 h . . . 212 n. Each update available space includesone or more memory locations 80 (FIG. 3c ), each memory location storingthe 0xFF pattern. As shown in FIG. 5b , the update available spaces 212a, 212 b . . . 212 n, each storing one or more instances of theparticular pattern or patterns, may be interspersed throughout the U1data field 201 of the sector and thus may be interspersed andintermingled with the memory locations storing the remaining data of theinitial set of data of the data structure U1. The remaining data of theinitial set of data of the data structure U1 does not exhibit theparticular pattern which is the 0xFF pattern in this example.

In one embodiment, a limited section of update available spaces may bereserved within the initial data structure U1 in each sector for initialentries of sequences of linked-list data structures. In this embodiment,the update available spaces 212 a, 212 b, 212 c and 212 d, for example,have been reserved in sector 74 for initial entries of linked-list datastructures. It is appreciated that in other embodiments, a greater orfewer number may be reserved and not used for storing data of theinitial update U1. Accordingly, in this example, the first entry 224 a(FIG. 5d ) of the linked-list data structure U2 is stored in thereserved update available spaces 212 a, 212 b (FIG. 5b ). As a result,the initial entry 224 a (FIG. 5d ) of the linked-list data structure U2may be readily located by reading from the reserved spaces.

The linked-list interlineation logic 86 (FIG. 2) further includes datareplacement logic 94 configured to replace (block 220, FIG. 4) data ofat least the first pattern (0xFF in this example) of data stored in theidentified subset 212 a, 212 b, 212 c, 212 d, 212 e, 212 f, 212 g, 212 h. . . 212 n of memory locations with a subsequent set of data (FIG. 5c )in a data structure such as a linked-list data structure U2 having asequence of linked-list entries 224 a, 224 b, 224 c, 224 d, for example.Accordingly, in this example, the data replacement logic 94 replaces(block 220, FIG. 4) the 0xFF pattern stored in one or more of the updateavailable spaces 212 a, 212 b . . . 212 n identified by the patternrecognition logic 92 with update data in a linked-list data structure U2as shown in FIG. 5c having a sequence of linked-list entries 224 a, 224b, 224 c, 224 d.

More specifically in this example, a first linked-list entry 224 a (FIG.5c ) of the data structure U2 is stored in and thus replaces the updateavailable spaces 212 a, 212 b (FIG. 5b ). Similarly, a second,next-in-sequence linked-list entry 224 b (FIG. 5c ) of the datastructure U2 is stored in and thus replaces a portion of the updateavailable spaces 212 e (FIG. 5b ), a third, next-in-sequence linked-listentry 224 c (FIG. 5c ) of the data structure U2 is stored in and thusreplaces the update available space 212 f (FIG. 5b ), and a fourth,next-in-sequence linked-list entry 224 d (FIG. 5c ) of the datastructure U2 is stored in and thus replaces a portion of the updateavailable space 212 g (FIG. 5b ).

In this example, the sequence of linked-list entries 224 a, 224 b, 224c, 224 d of the data structure U2 need not be contiguous with each otherwithin the sector 74 but instead may be separated by a number of memorylocations containing remaining data of the initial set of data stored inthe U1 data field 201 (or ECC field 204) of the data structure U1. Inthis manner, the sequence of linked-list entries 224 a, 224 b, 224 c,224 d of the linked-list data structure U2 are interspersed with theremaining data of the initial set of data of the data structure U1 asshown in FIG. 5c . Some types of flash memory such as NOR flash memorypermit individual bytes to addressed with write data at the byte or wordlevel, for example.

In this embodiment, the linked-list interlineation logic 86 (FIG. 2)includes linked-list entry generation logic 96 configured to generate asequence of linked-list entries such as the sequence of linked-listentries 224 a, 224 b, 224 c, 224 d, of the linked-list data structure U2(FIG. 5c ), for example. Thus, in this example, the linked-list datastructure U2 includes a first linked-list entry 224 a, and a second,next-in-sequence entry 224 b with respect to the first linked-list entry224 a of the first linked-list data structure U2. The linked-list datastructure U2 further includes a third, next-in-sequence entry 224 c withrespect to the entry 224 b, and a fourth, next-in-sequence entry 224 dwith respect to the third linked-list entry 224 c of the t linked-listdata structure U2.

As shown in FIG. 5c , the linked-list data structure U2 includes fields228 a, 228 b, 228 c, 228 d, 228 e, 228 f, 228 g, 228 h, 228 i, 228 j,228 k which are placed in the sequence of linked-list entries 224 a-224d of the linked-list data structure U2. In this embodiment, the datareplacement logic 94 (FIG. 2) is configured to store the fields 228a-228 k in the appropriate entry of the sequence of linked-list entriesof the data structure U2.

In the illustrated embodiment, each linked-list entry 224 a, 224 b, 224c, 224 d, of the linked-list data structure U2 (FIG. 5c ), includes aheader field 228 a, 228 c, 228 g and 228 j, respectively. The firstlinked-list entry 224 a includes a pointer location field 228 b, and thedata replacement logic 94 is further configured to store location datain the pointer location field 228 b of the first linked-list entry 224a. The location data stored in the pointer location field 228 bpoints(as represented by an arrow) to the location of the second,next-in-sequence linked-list entry which is entry 224 b of the sequenceof linked-list entries of the linked-list data structure U2 in theexample of FIG. 5c . In a similar manner, location data stored in apointer location field 228 f of the second linked-list entry 224 bpoints (as represented by an arrow) to the location of the third,next-in-sequence linked-list entry which is entry 224 c of the sequenceof linked-list entries of the linked-list data structure U2 in theexample of FIG. 5c , and location data stored in a pointer locationfield 228 i of the third linked-list entry 224 c points (as representedby an arrow) to the location of the fourth, next-in-sequence, and finallinked-list entry which is entry 224 d of the sequence of linked-listentries of the linked-list data structure U2 in the example of FIG. 5c .The location data may be in the form of a physical or logical address inone embodiment, or may be in the form of an offset address, for example.In this manner, the sequence of linked-list entries 224 a, 224 b, 224 c,224 d, of the linked-list data structure U2 are linked together by thepointer location fields of the linked-list entries. As explained ingreater detail below, the sequence of entries of the linked-list datastructure U2 may be located and read by traversing the linked-list datastructure U2, using the pointer location fields 228 b, 228 f, 228 i tofind the next-in-sequence entries of the linked-list data structure U2.

In the example of FIG. 5c , the memory locations of the sector 74 arelogically configured as an array of rows and columns of memory locationsin which addresses of the memory locations of each row of memorylocations increase from left to right in FIG. 5c , and the addresses ofthe memory locations of each column increase from top to bottom of thesector 74 in FIG. 5c . Accordingly, in this example, eachnext-in-sequence entry is at a higher memory location than the priorlinked-list entry of the sequence of linked-list entries depicted inFIG. 5c . Thus, a traversal of the sequence of linked-list entriesdepicted in FIG. 5c is generally in a direction from top to bottom asindicated by the arrows between entries, corresponding to the directionof increasing columnar addresses. However, it is appreciated that asequence of linked-list entries need not be in a uniform direction,either top to bottom, or left to right. Thus, for example, a second,next-in-sequence entry may have an address within the sector that islower than the address of the first entry, a third, next-in-sequenceentry may have an address within the sector that is higher than one orboth of the first and second entries, a fourth, next-in-sequence entrymay have an address within the sector that is higher than one or more ofthe first, second and third entries, etc. As a result, a traversal of asequence of linked-list entries may change direction multiple times,from a direction of increasing addresses to a direction of decreasingaddresses and vice versa.

One or more of the linked-list entries 224 a, 224 b, 224 c, 224 d, ofthe sequence of linked-list entries of the linked-list data structure U2(FIG. 5c ), includes a payload field such as the payload field 228 e ofthe entry 224 b, the payload field 228 h of the entry 224 c and thepayload field 228 k of the entry 224 d. The update data of thesubsequent set of data to be stored in the sequence of linked-listentries of the linked-list data structure U2 (FIG. 5c ), is stored insuch payload fields.

One or more of the linked-list entries 224 a, 224 b, 224 c, 224 d, ofthe sequence of linked-list entries of the linked-list data structure U2(FIG. 5c ), further includes a sequence length field such as thesequence length field 228 d of the entry 224 b. The sequence lengthfield identifies the total length of the sequence of linked-list entriesof the linked-list data structure U2 in a suitable unit such as bytes,for example. As explained in greater detail below, the sequence lengthdata stored in the sequence length field 228 d may be used to confirmthat the entire sequence of linked-list entries of the linked-list datastructure U2 has been located and read in a subsequent read operation.

Once the data for the length, payload and/or locations fields for aparticular entry of the sequence of linked-list entries has beendetermined, an error correction code is calculated for those fields ofthe entry by error correction code logic such as the error correctioncode logic 90 (FIG. 2) of the memory control logic 84. In oneembodiment, the error correction code logic 90 is configured tocalculate the error correction code as a function of all the bits of anentry (with the possible exception of the bits of the error correctioncode itself), and as such, the entry error correction code calculatedfor each entry of the sequence of entries may be referred to as an“entry-wide” error correction code. Once calculated, the datareplacement logic 94 (FIG. 2) is configured to store (block 240, FIG. 4)the entry-wide error correction code data in the header field 228 a, 228c, 228 g, 228 j of the associated entry. It is appreciated that ECC datamay be stored in other fields of an entry of a sequence of linked-listentries, depending upon the particular application.

In a subsequent read operation, the error correction code logic 90 isfurther configured to detect and correct storage errors in thesubsequent set of data as a function of error correction code datastored in the sequence of linked-list entries. Accordingly, should aread, write or storage error be encountered in a read operation for anentry storing all or a portion of the subsequent set of data of the datastructure U2, such an error in an entry may be detected and correctedutilizing the entry-wide error correction code stored in the headerfield for the particular entry. Although each entry of the sequence oflinked-list entries has its own entry-wide error correction code data,it is appreciated that in other embodiments, error correction code maybe generated for more than one entry including all entries in asequence-wide error correction code, for example.

Although described in connection with error correction code calculationand storage in the illustrated embodiment, it is appreciated thatlinked-list interlineation in accordance with the present descriptionmay be utilized in connection with data storage which does not calculateand store error correction codes. Accordingly, in some embodiments, theerror correction code calculation and storage of blocks 208, 240 may beoptional.

Once all entries 224 a-224 d of the sequence of linked-list entries ofthe linked-list data structure U2 have been stored, the data structureU2 is complete (block 244, FIG. 4), and the linked-list interlineationlogic 86 can await (block 210) additional subsequent sets of data to bestored in the sector with the previously stored initial data of the datastructure U1 and the previously stored data structure U2 containing asubsequent set of data. For example, FIG. 5d shows an added linked-listdata structure U3 for storing a third set of data in a sequence oflinked-list entries 250 a- 250 b, and an added linked-list datastructure U4 for storing a fourth set of data in a sequence oflinked-list entries 254 a, 254 b. The linked-list entry 250 a of thelinked-list data structure U3 is stored in the update available space228 g (FIG. 5c ) and includes an ECC header field 260 a, and a pointerlocation field 260 b which points to the location of an ECC header field260 c of the next-in-sequence entry 250 b 1 of the data structure U3.The entry 250 b is stored in the update available space 212 h (FIG. 5c )and further includes a sequence length field 260 d and a payload field260 e. The linked-list entry 254 a of the linked-list data structure U4is stored in the update available spaces 212 c, 212 d (FIG. 5c ) andincludes an ECC header field 264 a, and a pointer location field 264 bwhich points to the location of an ECC header field 264 c of thenext-in-sequence entry 254 b. The entry 254 b is stored in the updateavailable space 212 n (FIG. 5c ) and further includes a sequence lengthfield 264 d and a payload field 264 e. At an appropriate time,linked-list interlineation may be ended (block 270) for that sector. Forexample, once there are not sufficient remaining update available spacesin the sector to store additional sets of data in sequences oflinked-list entries, the linked-list interlineation may be ended (block270) for that particular sector. However, any remaining sets of data tobe stored may be stored in other sectors having sufficient updateavailable spaces.

In this example, the linked-list data structures U2, U3 and U4 need notbe contiguous with each other within the sector 74 but instead may beseparated by a number of memory locations containing remaining data ofthe initial set of data of the data structure U1. In this manner, thelinked-list data structures U2, U3 and U4 are interspersed with the dataof the initial set of data of the data structure U1 as shown in FIG. 5d.

Similarly the entries of the linked-list data structures U2, U3 and U4need not be contiguous with other entries but instead may be separatedby a number of memory locations containing remaining data of the initialset of data of the data structure U1. In this manner, the linked-listdata structures U2, U3 and U4 and their entries are interspersed withthe data of the initial set of data of the data structure U1 as shown inFIG. 5 d.

FIG. 6 depicts one example of operations of the linked-list entrygeneration logic 96 and the data replacement logic 94 (FIG. 2) of thelinked-list interlineation logic 86. Upon receipt (block 310, FIG. 6) ofupdate data such as the subsequent set of data which will be stored inthe linked-list data structure U2 in this example, the data replacementlogic 94 (FIG. 2) is configured to select (block 314) one or more updateavailable spaces for purposes of storing an entry (referred to as the“current” linked-list entry) of a sequence of linked-list entries. Inthis example, the update available spaces 212 a (FIG. 5b ) and 212 b areselected (block 314, FIG. 6) for purposes of storing the first entry 224a (FIG. 5c, 5d ) of the linked-list data structure U2. Also, in thisexample, the update data of the subsequent set of data is determined(block 318) to be too large for the current entry 224 a of the datastructure U2. Accordingly, the data replacement logic 94 (FIG. 2) isconfigured to select (block 322, FIG. 6) one or more additional updateavailable spaces for purposes of storing the next-in-sequencelinked-list entry which is entry 224 b (FIG. 5d ) in this example, ofthe sequence of linked-list entries of the data structure U2.

The linked-list entry generation logic 96 (FIG. 2) is configured togenerate location data pointing to the location of the next-in-sequenceentry, which is entry 224 b (FIG. 5d ) in this example. The datareplacement logic 94 (FIG. 2) is configured to store (block 326) thelocation data pointing to the location of the next-in-sequence entry,which is entry 224 b (FIG. 5d ) in this example, in a pointer locationfield 228 b (FIG. 5d ) of the current linked-list entry which is entry224 a, in this example.

As previously mentioned, in one embodiment a sequence length field maybe omitted from some entries of the linked-list data structure.Accordingly, he linked-list entry generation logic 96 (FIG. 2) isconfigured to determine (block 330, FIG. 6) whether a sequence lengthfield is to be reserved for the current linked-list entry beinggenerated and stored. In this example, the current linked-list entry 224a (FIG. 5d ) lacks a sequence length field as shown in FIG. 5d .Accordingly, the sequence length field reservation operation (block 332,FIG. 6) is bypassed for the current linked-list entry 224 a.

As previously mentioned, in one embodiment a payload field may beomitted from some entries of the linked-list data structure.Accordingly, the linked-list entry generation logic 96 (FIG. 2) isconfigured to determine (block 334, FIG. 6) whether the currentlinked-list entry is to have a payload field for purposes of storingupdate data of the subsequent set of data. In this example, the currentlinked-list entry 224 a lacks a payload field as shown in FIG. 5d .Accordingly, the payload data storing operation (block 336, FIG. 6) isbypassed for the current linked-list entry 224 a.

Having determined (block 338, FIG. 6) that the current linked-list entry224 a lacks a sequence length field, the ECC data may be calculated bythe error correction code logic 90 (FIG. 2) based upon the completeddata of the nonheader fields which is the location field 228 b (FIG. 5d) of the entry 224 a in this example. The data replacement logic 94(FIG. 2) is configured to store (block 340, FIG. 6) the calculated ECCdata for the entry 224 a (FIG. 5d ) in the ECC header field 228 a forthe entry 224 a and redesignate (block 344) the next-in-sequencelinked-list entry, entry 224 b in this example, to become the currentlinked-list entry. Thus, the linked-list entry 224 b is now designatedthe current linked-list entry at this stage of the operations of FIG. 6.

Proceeding with the newly designated current entry 224 b, the updatedata of the subsequent set of data is determined (block 318) to be toolarge for the payload field which is payload field 228 e (FIG. 5d ) inthis example, of the current linked-list entry 224 b of the datastructure U2. Accordingly, the data replacement logic 94 (FIG. 2)selects (block 322, FIG. 6) one or more additional update availablespaces for purposes of storing the next-in-sequence linked-list entrywhich is entry 224 c (FIG. 5d ) in this example.

The linked-list entry generation logic 96 (FIG. 2) generates locationdata pointing to the location of the next-in-sequence entry, which isentry 224 c (FIG. 5d ) in this example. The data replacement logic 94(FIG. 2) stores (block 326) the location data pointing to the locationof the next-in-sequence entry, which is entry 224 c (FIG. 5d ) in thisexample, in a pointer location field 228 f (FIG. 5d ) of the currentlinked-list entry which is entry 224 b, in this example.

The linked-list entry generation logic 96 (FIG. 2) determines (block330, FIG. 6) whether a sequence length field is to be reserved for thecurrent linked-list entry being generated and stored. In this example,the current linked-list entry 224 b has a sequence length field, whichis sequence length field 228 d in this example, as shown in FIG. 5d .Accordingly, the sequence length field 228 d is reserved (block 332,FIG. 6) for the current linked-list entry 224 b.

The linked-list entry generation logic 96 (FIG. 2) determines (block334, FIG. 6) whether the current linked-list entry is to have a payloadfield for purposes of storing update data of the subsequent set of data.In this example, the current linked-list entry 224 b has a payload fieldwhich is payload field 228 e in this example, as shown in FIG. 5d .Accordingly, the data replacement logic 94 (FIG. 2) stores (block 336,FIG. 6) a first portion of the data of the subsequent data set in thepayload field which is payload field 228 e in this example for thecurrent linked-list entry 224 b.

Having determined (block 338, FIG. 6) that the current linked-list entry224 b has reserved a sequence length field, the data replacement logic94 (FIG. 2) bypasses the ECC data storing operation (block 340) sincethe sequence length data has not yet been stored in the sequence lengthfield 228 d of the current entry 224 b in this example. The datareplacement logic 94 (FIG. 2) redesignates (block 340) thenext-in-sequence linked list entry, entry 224 c in this example, tobecome the current linked-list entry. Thus, the linked-list entry 224 cis now designated the current linked-list entry at this stage of theoperations of FIG. 6.

Proceeding with the newly designated current entry 224 c, the remainingupdate data of the subsequent set of data is again determined (block318) to be too large for the payload field which is payload field 228 h(FIG. 5d ) in this example, of the current linked-list entry 224 c ofthe data structure U2. Accordingly, the data replacement logic 94 (FIG.2) selects (block 322, FIG. 6) one or more additional update availablespaces for purposes of storing the next-in-sequence linked-list entrywhich is entry 224 d (FIG. 5d ) in this example.

The linked-list entry generation logic 96 (FIG. 2) generates locationdata pointing to the location of the next-in-sequence entry, which isentry 224 d (FIG. 5d ) in this example. The data replacement logic 94(FIG. 2) stores (block 326) the location data pointing to the locationof the next-in-sequence entry, which is entry 224 d (FIG. 5d ) in thisexample, in a pointer location field 228 i (FIG. 5d ) of the currentlinked-list entry which is entry 224 c, in this example.

The linked-list entry generation logic 96 (FIG. 2) determines (block330, FIG. 6) whether a sequence length field is to be reserved for thecurrent linked-list entry being generated and stored. In this example,the current linked-list entry 224 c does not have a sequence lengthfield, and accordingly, a sequence length field is not reserved (block332, FIG. 6) for the current linked-list entry 224 b.

The linked-list entry generation logic 96 (FIG. 2) determines (block334, FIG. 6) whether the current linked-list entry is to have a payloadfield for purposes of storing update data of the subsequent set of data.In this example, the current linked-list entry 224 c has a payload fieldwhich is payload field 228 h in this example, as shown in FIG. 5d .Accordingly, the data replacement logic 94 (FIG. 2) stores (block 336,FIG. 6) a second portion of the data of the subsequent data set in thepayload field which is payload field 228 h in this example for thecurrent linked-list entry 224 c.

Having determined (block 338, FIG. 6) that the current linked-list entry224 c lacks a sequence length field, the ECC data may be calculated bythe error correction code logic 90 (FIG. 2) based upon the completeddata of the nonheader fields which are the payload field 228 h and thelocation field 228 i of the entry 224 c in this example. The datareplacement logic 94 (FIG. 2) is configured to store (block 340, FIG. 6)the calculated ECC data for the entry 224 c in the ECC header field 228g for the entry 224 c. The data replacement logic 94 (FIG. 2)redesignates (block 340) the next-in-sequence linked list entry, entry224 d in this example, to become the current linked-list entry. Thus,the linked-list entry 224 d is now designated the current linked-listentry at this stage of the operations of FIG. 6.

Proceeding with the newly designated current entry 224 d, the remainingupdate data of the subsequent set of data is determined (block 318) tonot be too large for the payload field which is payload field 228 k(FIG. 5d ) in this example, of the current linked-list entry 224 d ofthe data structure U2. Accordingly, current entry 224 d is the finalentry of the sequence of linked-list entries of the linked-list datastructure U2 and the selection (block 322, FIG. 6) of one or moreadditional update available spaces for purposes of storing anext-in-sequence linked-list entry is bypassed.

In this example, the current linked-list entry 224 d has a payload fieldwhich is payload field 228 k in this example, as shown in FIG. 5d .Accordingly, the data replacement logic 94 (FIG. 2) stores (block 350,FIG. 6) the third and final portion of the data of the subsequent dataset in the payload field which is payload field 228 k in this examplefor the current linked-list entry 224 d. In addition, the datareplacement logic 94 (FIG. 2) stores (block 354, FIG. 6) the length dataidentifying the total length of the linked-list data structure U2 in thesequence length field which is sequence length field 228 d of the entry224 b in this example.

The linked-list entry generation logic 96 (FIG. 2) determines (block358, FIG. 6) whether the sequence length field is in the currentlinked-list entry. In this example, the current linked-list entry 224 dlacks the sequence length field. Accordingly, the ECC data may becalculated by the error correction code logic 90 (FIG. 2) based upon thecompleted data of the nonheader fields which is the payload field 228 kof the entry 224 d in this example. The data replacement logic 94 (FIG.2) stores (block 362, FIG. 6) the calculated ECC data for the entry 224d in the ECC header field 228 j for the entry 224 d.

As previously mentioned the second entry 224 b of the sequence oflinked-list entries for the data structure U2 has the sequence lengthfield 228 d in this example. Having stored the length data in thesequence length field 228 d, the ECC data may be calculated by the errorcorrection code logic 90 (FIG. 2) based upon the completed data of thenonheader fields which is the sequence length field 228 d, the payloadfield 228 e, and the location field 228 f of the entry 224 b in thisexample. The data replacement logic 94 (FIG. 2) stores (block 364, FIG.6) the calculated ECC data for the entry 224 b in the ECC header field228 c for the entry 224 b. At this point, all entries of the sequence ofentries 224 a-224 d of the data structure U2 storing the data of thesubsequent set have been completed and stored in update available spacesof the sector 74. The fields 260 a (FIG. 5d ), 260 b, 260 c, 260 d and260 e of the linked-list data structure U3 and the 264 a, 264 b, 264 c,264 d and 264 e of the linked-list data structure U4 may be placed inthe sector 74 in a similar manner. It is appreciated that the field dataof the sequence of linked-list entries may be calculated and filled inthe fields in any order, depending upon the particular application.

FIG. 7 depicts an example of operations of the memory control logic 84including the linked-list interlineation logic 86 (FIG. 2) which areconfigured to read from the memory, the subsequent sets of data of thelinked-list data structures, as well as the initial set of data of theinitial data structure stored in the sector. In this example, the memorycontrol logic 84 reads the linked-list data structures U2, U3, U4 fromthe sector 74 and also the initial data structure U1 of the sector 74.

Accordingly, if it is determined (block 410, FIG. 7) that the sectorbeing read contains linked-list data structures that have not yet beenread, a linked-list entry is read (block 414). In this example, thefirst linked-list entry read is the entry 224 a (FIG. 5d ) of thelinked-list data structure U2. An initial entry of a sequence of entriesof a linked-list data structure may be located within the sector usingvarious techniques as appropriate. For example, a limited section ofupdate available spaces may be reserved within the initial datastructure U1 for initial entries of sequences of linked-list datastructures. In this embodiment, the update available spaces 212 a, 212b, 212 c and 212 d, for example, have been reserved for initial entriesof linked-list data structures. Accordingly, in this example, the firstentry 224 a (FIG. 5d ) of the linked-list data structure U2 is stored inthe reserved update available spaces 212 a, 212 b (FIG. 5b ). As aresult, the initial entry 224 a (FIG. 5d ) of the linked-list datastructure U2 may be readily located by reading from the reserved spaces.The initial entry 224 a (FIG. 5d ) of the linked-list data structure U2is error checked (block 418) in this embodiment using the ECC datastored in the ECC header field 228 a of the entry 224 a. If an ECC erroris detected when reading an entry and the error cannot be corrected, thereading operation of the data structure U2 will be exited in thisembodiment without reading the remaining entries of the data structureU2 since it will be deemed that the data of the entries cannot betrusted.

The remaining entry data is obtained (block 420, FIG. 7) from theinitial entry 224 a (FIG. 5d ) of the linked-list data structure U2,including reading payload data (if any), location data (if any), andlength data (if any) from the entry. In this example, the initial entry224 a (FIG. 5d ) of the linked-list data structure U2 has a locationfield 228 b (in addition to the ECC header field 228 a) but lacks apayload field or a sequence length field.

It is determined (block 422, FIG. 7) by the location field 228 b thatthe sequence of linked-list entries of the linked-list data structure U2has additional entries and therefore the next-in-sequence entry 224 b isread (block 414, FIG. 7) using the location data stored in the locationfield 228 b of the entry 224 a to locate the next-in-sequence entry 224b. The next-in-sequence entry 224 b (FIG. 5d ) of the linked-list datastructure U2 is error checked (block 418) in this embodiment using theECC data stored in the ECC field 228 c (FIG. 5d ) of the entry 224 b.Sequence length data, payload data and location data are obtained (block420, FIG. 7) from the fields 228 d (FIG. 5d ), 228 e, and 228 f,respectively of the entry 224 b. The remaining entries, 224 c, 224 d ofthe sequence of linked-list entries of the linked-list data structure U2are located, read and error checked in this manner. Reading of thecomplete sequence of entries 224 a-224 d of the linked-list datastructure U2 may be confirmed by the comparing the sequence length dataobtained from the sequence length field 228 d to the total number ofbytes located in the sequence of entries 224 a-224 d of the linked-listdata structure U2.

The fields of the entries of the sequence of linked-list entries may bedelineated using any suitable technique such as field boundary markers,field identity markers, predetermined sizes of fields, predeterminedordering of fields, location tables, etc. depending upon the particularapplication. For example, in one embodiment, each payload field maycontain a length field that indicates the number of bytes in the payloadfield. FIG. 5e shows an example of the payload field 228 e of the entry224 b (FIG. 5d ) of the data structure U2, having a payload length field228 e 2 (FIG. 5e ) which may be used to calculate the location of thelocation field 228 f (FIG. 5d ) which is placed after the payload field228 e in this example. Additionally, each payload field may contain oneor more sets of location, length or data fields. For example, a payloadlocation field 228 e 1 (FIG. 5e ) of the payload field 228 e may containlocation data which points to where data is to be placed within theinitial data set. A payload length field 228 e 2 described aboveindicates the length of data to be inserted, and a payload data field228 e 3 contains received data of the update data. In this example, itis determined (block 410, FIG. 7) that the sector being read containsadditional linked-list data structures that have not yet been read, thatis, linked-list data structures U3 (FIG. 5d ) and U4. Accordingly, thesequence of entries 250 a-250 b of the linked-list data structure U3 andthe sequence of entries 254 a-254 b of the linked-list data structure U4are read in a manner similar to that described above in connection withthe sequence of entries 224 a-224 d of the linked-list data structureU2. The sets of update data which were stored as payload data inlinked-list data structures U2, U3, U4 may be utilized as appropriate bythe system.

In this example, the initial entry 250 a of the linked-list datastructure U3 is located by its placement immediately after the lastentry 224 d of the sequence of entries of the linked-list data structureU2. The initial entry 254 a of the linked-list data structure U4 islocated by its placement in the reserved update available spaces 212 c,212 d (FIG. 5b ). It is appreciated that sequences of linked-listentries may be located within a data structure such as the datastructure U1, using other techniques depending upon the particularapplication. For example, a table may be used to identify locations ofone or more entries of linked-list data structures. In anotherembodiment, a flag bit may be inserted in the last entry of a datastructure to indicate whether that entry is followed by an entry ofanother update data structure. For example, the last entry 224 d (FIG.5d ) of the linked-list data structure U2 may include a flag bit toindicate when set, that the memory control logic reading the sectorshould examine the memory locations following the entry 224 d todetermine if those memory locations contain an entry of anotherlinked-list data structure or are empty, that is, are an updateavailable space. In the example of FIG. 5d , a flag bit set in the lastentry 224 d of the linked-list data structure U2 indicates that thememory control logic examining the memory locations following the entry224 d would determine that those memory locations contain the entry 250a of the linked-list data structure U3. Once all the linked-list datastructures U2, U3, U4 have been read such that it is determined (block410) that there are no linked-list data structures remaining unread, thesector may be read (block 426) into a memory such as a buffer, forexample, to recover the initial set of data of the initial datastructure U1 stored in the data field 201 (FIG. 5a ). Accordingly, thelinked-list data structures U2, U3, U4 in the buffer are replaced (block430, FIG. 7) with the first pattern of data which is the 0xFF pattern inthis example. As a result, the initial set of data stored in the datafield 201 is restored to its original state prior to the linked-listinterlineation of the data structures U2, U3, U4 which were embedded theinitial data structure U1. Accordingly, the initial error correctioncode stored in the ECC field 204 of the initial data structure U1 may beused to error check (block 434) the initial data of the data field 201.In this manner, the initial set of data stored in the data field 201 ismade available to be utilized as appropriate by the system.

It is appreciated that when reading the sector and retrieving thelinked-list data structures, a snapshot of the data may be obtained atdifferent time instances in those instances in which the updates areobtained at different times. For example, after the initial set of datais stored as the data structure U1, a second update stored in the datastructure U2 is subsequently applied on top of the initial set of dataof the data structure U1, and a third update stored in a data structureU3 is subsequently applied on top of the data structure U2. Such anarrangement may represent, for example, different temperaturemeasurements at different times by a temperature sensor.

EXAMPLES

The following examples pertain to further embodiments.

Example 1 is an apparatus, comprising:

a memory having memory locations configured to store data in datastructures, and

memory control logic configured to control input/output operations tothe memory wherein the memory control logic is further configured tostore an initial set of data which includes at least a first pattern ofdata, in an initial data structure having an initial set of memorylocations of the memory, and wherein the memory control logic includeslinked-list interlineation logic configured to, after the memory controllogic stores the initial set of data, store a subsequent set of data ina linked-list data structure within the initial data structure, thelinked-list data structure having a subset of the initial set of memorylocations and a sequence of linked-list entries stored in the subset ofthe initial set of memory locations, wherein the linked-listinterlineation logic includes pattern recognition logic configured toidentify a subset of memory locations within the initial set of memorylocations of the initial data structure, as a function of at least thefirst pattern of data wherein the memory locations of the subset ofmemory locations are interspersed with other memory locations of theinitial set of memory locations, and, data replacement logic configuredto replace the first pattern of data stored in a memory location of thesubset of memory locations with data of the subsequent set of data, tostore in the subset of memory locations, the subsequent set of data in alinked-list data structure in a sequence of linked-list entries of thelinked-list data structure.

In Example 2, the subject matter of Examples 1-7 (excluding the presentExample), can optionally include wherein the initial data structureincludes an error correction code field and wherein the memory controllogic includes error correction code logic configured to calculate forthe initial set of data, first error correction code data, the memorycontrol logic being configured to store a calculated first errorcorrection code data in the error correction code field of the initialdata structure, the error correction code logic being further configuredto detect and correct storage errors in the initial set of data as afunction of the first error correction code data, and wherein the errorcorrection code logic is further configured to calculate for thesubsequent set of data, second error correction code data, the memorycontrol logic being configured to store in the sequence of linked-listentries, second error correction code data after the first errorcorrection code data is stored, the error correction code logic beingfurther configured to detect and correct storage errors in thesubsequent set of data as a function of the second error correction codedata.

In Example 3, the subject matter of Examples 1-7 (excluding the presentExample), can optionally include wherein the linked-list interlineationlogic includes linked-list entry generation logic configured to generatethe sequence of linked-list entries which includes a first linked-listentry and a second, next-in-sequence entry with respect to the firstlinked-list entry of the sequence of linked-list entries, and whereineach linked-list entry has a header field and wherein the datareplacement logic is further configured to store entry error correctioncode data of the second error correction code data, in a header field ineach of the first linked-list entry and the second, next-in-sequenceentry, wherein the first linked-list entry has a pointer location fieldand wherein the data replacement logic is further configured to storewithin the subsequent set of data, location data in a pointer locationfield of the first linked-list entry wherein the location data points tothe location of the second, next-in-sequence linked-list entry of thesequence of linked-list entries within the memory, and wherein at leastone of the first linked-list entry and the next-in-sequence entry, has apayload field, and a sequence length field and wherein the datareplacement logic is further configured to store within the subsequentset of data, payload data in a payload field, and sequence length datain a sequence length field wherein the sequence length data identifies atotal length of the sequence of linked-list entries.

In Example 4, the subject matter of Examples 1-7 (excluding the presentExample), can optionally include wherein the linked-list interlineationlogic is further configured to read from the memory, the subsequent setof data of the sequence of linked-list entries, and remaining data ofthe initial set of data, and the data replacement logic is furtherconfigured to replace the subsequent set of data with the first patternof data, to restore the initial set of data to provide a restoredinitial set of data.

In Example 5, the subject matter of Examples 1-7 (excluding the presentExample), can optionally include wherein the linked-list interlineationlogic configured to read from the memory, the subsequent set of data ofthe sequence of linked-list entries, is further configured to:

read location data stored in a pointer location field of the firstlinked-list entry to identify the location of the second,next-in-sequence linked-list entry of the sequence of linked-listentries within the memory,

read payload data stored in a payload field of an entry of the sequenceof linked-list entries,

read entry error correction code data stored in a header field in eachof the first linked-list entry and the second, next-in-sequence entry,and

read sequence length data in a sequence length field and determine basedupon the sequence length data whether a complete sequence of linked-listentries has been read from the memory, and

wherein the error correction code logic configured to detect and correctstorage errors in the subsequent set of data is further configured toerror detect and correct data of the first linked-list entry and thesecond, next-in-sequence entry, as a function of the entry errorcorrection code data stored in a header field in each of the firstlinked-list entry and the second, next-in-sequence entry, respectively.

In Example 6, the subject matter of Examples 1-7 (excluding the presentExample), can optionally include wherein the memory is a non-volatileflash memory having an erasable block of non-volatile memory , whereinthe memory control logic includes block erase logic configured to changeall bits of an erasable block to a common bit state to erase an erasableblock of the non-volatile flash memory wherein an erasable block is thesmallest unit of the non-volatile memory capable of being erased at atime, wherein the first pattern is a string of bits which areexclusively of the common bit state, wherein the initial set of memorylocations is a sector of the memory, and wherein the initial datastructure fills the sector.

In Example 7, the subject matter of Examples 1-7 (excluding the presentExample), can optionally include at least one of:

a processor;

a display communicatively coupled to the processor,

a network interface communicatively coupled to the processor, and

a battery coupled to provide power to the apparatus.

Example 8 is a method, comprising:

storing an initial set of data in an initial data structure having aninitial set of memory locations of a memory, and

storing a subsequent set of data in a linked-list data structure withinthe initial data structure, the linked-list data structure having asubset of the initial set of memory locations and a sequence oflinked-list entries stored in the subset of the initial set of memorylocations, the storing a subsequent set of data including:

identifying a subset of memory locations within the initial set ofmemory locations, wherein the subset of memory locations store a firstpattern of data wherein the memory locations of the subset of memorylocations are interspersed with other memory locations of the initialset of memory locations storing the initial set of data, and

replacing the first pattern of data stored in a memory location of thesubset of memory locations with data of the subsequent set of data, saidreplacing including storing in the subset of memory locations, thesubsequent set of data in a linked-list data structure in a sequence oflinked-list entries of the linked-list data structure.

In Example 9, the subject matter of Examples 8-16 (excluding the presentExample), can optionally include wherein the storing an initial set ofdata includes storing first error correction code data configured fordetecting and correcting storage errors in the initial set of data, andwherein the storing a subsequent set of data includes storing seconderror correction code data after storing the initial set of dataincluding the first error correction code data, the second errorcorrection code data being configured for detecting and correctingstorage errors in the subsequent set of data.

In Example 10, the subject matter of Examples 8-16 (excluding thepresent Example), can optionally include wherein the sequence oflinked-list entries includes a first linked-list entry and a second,next-in-sequence entry with respect to the first linked-list entry ofthe sequence of linked-list entries, and wherein storing second errorcorrection code data includes storing entry error correction code datain a header field in each of the first linked-list entry and the second,next-in-sequence entry.

In Example 11, the subject matter of Examples 8-16 (excluding thepresent Example), can optionally include wherein the storing asubsequent set of data includes storing location data in a pointerlocation field of the first linked-list entry wherein the location datapoints to the location of the second, next-in-sequence linked-list entryof the sequence of linked-list entries within the memory.

In Example 12, the subject matter of Examples 8-16 (excluding thepresent Example), can optionally include wherein the storing asubsequent set of data includes storing in at least one of the firstlinked-list entry and the second, next-in-sequence entry, payload datain a payload field, and sequence length data in a sequence length fieldwherein the sequence length data identifies a total length of thesequence of linked-list entries.

In Example 13, the subject matter of Examples 8-16 (excluding thepresent Example), can optionally include:

reading from the memory, the subsequent set of data of the sequence oflinked-list entries, and remaining data of the initial set of data, and

restoring the initial set of data to provide a restored initial set ofdata, said restoring including replacing the sequence of linked-listentries with the first pattern of data.

In Example 14, the subject matter of Examples 8-16 (excluding thepresent Example), can optionally include error checking the subsequentset of data of the sequence of linked-list entries read from the memoryusing the second error correction code data, and error checking therestored initial set of data read using the first error correction codedata.

In Example 15, the subject matter of Examples 8-16 (excluding thepresent Example), can optionally include wherein the reading from thememory, the subsequent set of data of the sequence of linked-listentries, includes:

reading location data stored in a pointer location field of the firstlinked-list entry to identify the location of the second,next-in-sequence linked-list entry of the sequence of linked-listentries within the memory,

reading payload data stored in a payload field of an entry of thesequence of linked-list entries,

reading entry error correction code data in stored in a header field ineach of the first linked-list entry and the second, next-in-sequenceentry, and

reading sequence length data in a sequence length field and determiningbased upon the sequence length data whether a complete sequence oflinked-list entries has been read from the memory, and

wherein the error checking the subsequent set of data of the sequence oflinked-list entries read from the memory using the second errorcorrection code data, includes error checking data of the firstlinked-list entry and the second, next-in-sequence entry, using theentry error correction code data stored in a header field in each of thefirst linked-list entry and the second, next-in-sequence entry,respectively.

In Example 16, the subject matter of Examples 8-16 (excluding thepresent Example), can optionally include wherein the memory is anon-volatile flash memory having an erasable block of non-volatilememory wherein the erasable block is the smallest unit of thenon-volatile memory capable of being erased at a time, the methodfurther comprising erasing a block of the non-volatile flash memory, theerasing including changing all bits of the block being erased to acommon bit state wherein the first pattern is a string of bits which areexclusively of the common bit state, wherein the initial set of memorylocations is a sector of the memory, and wherein the initial set of datafills the sector.

Example 17 is an apparatus for memory comprising means to perform amethod as claimed in any preceding claim.

Example 18 is a computer program product for use with a memory havingmemory locations configured to store data in data structures, whereinthe computer program product comprises a computer readable storagemedium having program instructions embodied therewith, the programinstructions executable by a processor to cause processor operations,the processor operations comprising:

controlling input/output operations to the memory including storing aninitial set of data which includes at least a first pattern of data, inan initial data structure having an initial set of memory locations ofthe memory: and

after storing the initial set of data, storing a subsequent set of datain a linked-list data structure within the initial data structure, thelinked-list data structure having a subset of the initial set of memorylocations and a sequence of linked-list entries stored in the subset ofthe initial set of memory locations, wherein storing a subsequent set ofdata includes:

identifying a subset of memory locations within the initial set ofmemory locations of the initial data structure, as a function of atleast the first pattern of data wherein the memory locations of thesubset of memory locations are interspersed with other memory locationsof the initial set of memory locations, and,

replacing the first pattern of data stored in a memory location of thesubset of memory locations with data of the subsequent set of data, tostore in the subset of memory locations, the subsequent set of data in alinked-list data structure in a sequence of linked-list entries of thelinked-list data structure.

In Example 19, the subject matter of Examples 18-26 (excluding thepresent Example), can optionally include wherein the initial datastructure includes an error correction code field and wherein storing aninitial set of data further includes calculating for the initial set ofdata, first error correction code data, and storing a calculated firsterror correction code data in the error correction code field of theinitial data structure, and

wherein storing a subsequent set of data further includes calculatingfor the subsequent set of data, second error correction code data, andstoring in the sequence of linked-list entries, second error correctioncode data after the first error correction code data is stored, and

wherein the processor operations further comprise detecting andcorrecting storage errors in the initial set of data as a function ofthe first error correction code data, and detecting and correctingstorage errors in the subsequent set of data as a function of the seconderror correction code data.

In Example 20, the subject matter of Examples 18-26 (excluding thepresent Example), can optionally include wherein storing a subsequentset of data further includes generating the sequence of linked-listentries which includes a first linked-list entry and a second,next-in-sequence entry with respect to the first linked-list entry ofthe sequence of linked-list entries, and wherein each linked-list entryhas a header field and wherein replacing the first pattern of dataincludes storing entry error correction code data of the second errorcorrection code data, in a header field in each of the first linked-listentry and the second, next-in-sequence entry.

In Example 21, the subject matter of Examples 18-26 (excluding thepresent Example), can optionally include wherein the first linked-listentry has a pointer location field and wherein replacing the firstpattern of data includes storing within the subsequent set of data,location data in a pointer location field of the first linked-list entrywherein the location data points to the location of the second,next-in-sequence linked-list entry of the sequence of linked-listentries within the memory.

In Example 22, the subject matter of Examples 18-26 (excluding thepresent Example), can optionally include wherein at least one of thefirst linked-list entry and the next-in-sequence entry, has a payloadfield, and a sequence length field and wherein replacing the firstpattern of data includes storing within the subsequent set of data,payload data in a payload field, and sequence length data in a sequencelength field wherein the sequence length data identifies a total lengthof the sequence of linked-list entries.

In Example 23, the subject matter of Examples 18-26 (excluding thepresent Example), can optionally include wherein the processoroperations further comprise reading from the memory, the subsequent setof data of the sequence of linked-list entries, and remaining data ofthe initial set of data, and replacing the subsequent set of data withthe first pattern of data, to restore the initial set of data to providea restored initial set of data.

In Example 24, the subject matter of Examples 18-26 (excluding thepresent Example), can optionally include wherein the reading from thememory, the subsequent set of data of the sequence of linked-listentries further includes:

reading location data stored in a pointer location field of the firstlinked-list entry to identify the location of the second,next-in-sequence linked-list entry of the sequence of linked-listentries within the memory,

reading payload data stored in a payload field of an entry of thesequence of linked-list entries, and

reading entry error correction code data stored in a header field ineach of the first linked-list entry and the second, next-in-sequenceentry.

In Example 25, the subject matter of Examples 18-26 (excluding thepresent Example), can optionally include wherein detecting andcorrecting storage errors in the subsequent set of data further includesdetecting and correcting data of the first linked-list entry and thesecond, next-in-sequence entry, as a function of the entry errorcorrection code data stored in a header field in each of the firstlinked-list entry and the second, next-in-sequence entry, respectively.

In Example 26, the subject matter of Examples 18-26 (excluding thepresent Example), can optionally include wherein the memory is anon-volatile flash memory having an erasable block of non-volatilememory , and wherein the processor operations further comprise changingall bits of an erasable block to a common bit state to erase an erasableblock of the non-volatile flash memory wherein an erasable block is thesmallest unit of the non-volatile memory capable of being erased at atime, wherein the first pattern is a string of bits which areexclusively of the common bit state, wherein the initial set of memorylocations is a sector of the memory, and wherein the initial datastructure fills the sector.

Example 27 is an apparatus, comprising:

a processor,

a memory coupled to the processor and having memory locations configuredto store data in data structures, and

memory control logic means coupled to the processor and configured forcontrolling input/output operations to the memory wherein the memorycontrol logic means is further configured for storing an initial set ofdata which includes at least a first pattern of data, in an initial datastructure having an initial set of memory locations of the memory, andwherein the memory control logic means includes linked-listinterlineation logic means configured for, after the memory controllogic means stores the initial set of data, storing a subsequent set ofdata in a linked-list data structure within the initial data structure,the linked-list data structure having a subset of the initial set ofmemory locations and a sequence of linked-list entries stored in thesubset of the initial set of memory locations, wherein the linked-listinterlineation logic means includes pattern recognition logic meansconfigured for identifying a subset of memory locations within theinitial set of memory locations of the initial data structure, as afunction of at least the first pattern of data wherein the memorylocations of the subset of memory locations are interspersed with othermemory locations of the initial set of memory locations, and, datareplacement logic means configured for replacing the first pattern ofdata stored in a memory location of the subset of memory locations withdata of the subsequent set of data, to store in the subset of memorylocations, the subsequent set of data in a linked-list data structure ina sequence of linked-list entries of the linked-list data structure.

In Example 28, the subject matter of Examples 27-33 (excluding thepresent Example), can optionally include wherein the initial datastructure includes an error correction code field and wherein the memorycontrol logic means includes error correction code logic meansconfigured for calculating for the initial set of data, first errorcorrection code data, the memory control logic means being configuredfor storing a calculated first error correction code data in the errorcorrection code field of the initial data structure, the errorcorrection code logic means being further configured for detecting andcorrecting storage errors in the initial set of data as a function ofthe first error correction code data, and wherein the error correctioncode logic means is further configured for calculating for thesubsequent set of data, second error correction code data, the memorycontrol logic means being configured for storing in the sequence oflinked-list entries, second error correction code data after the firsterror correction code data is stored, the error correction code logicmeans being further configured for detecting and correcting storageerrors in the subsequent set of data as a function of the second errorcorrection code data.

In Example 29, the subject matter of Examples 27-33 (excluding thepresent Example), can optionally include wherein the linked-listinterlineation logic means includes linked-list entry generation logicmeans configured for generating the sequence of linked-list entrieswhich includes a first linked-list entry and a second, next-in-sequenceentry with respect to the first linked-list entry of the sequence oflinked-list entries, and wherein each linked-list entry has a headerfield and wherein the data replacement logic means is further configuredfor storing entry error correction code data of the second errorcorrection code data, in a header field in each of the first linked-listentry and the second, next-in-sequence entry,

wherein the first linked-list entry has a pointer location field andwherein the data replacement logic means is further configured forstoring within the subsequent set of data, location data in a pointerlocation field of the first linked-list entry wherein the location datapoints to the location of the second, next-in-sequence linked-list entryof the sequence of linked-list entries within the memory, and

wherein at least one of the first linked-list entry and thenext-in-sequence entry, has a payload field, and a sequence length fieldand wherein the data replacement logic means is further configured forstoring within the subsequent set of data, payload data in a payloadfield, and sequence length data in a sequence length field wherein thesequence length data identifies a total length of the sequence oflinked-list entries.

In Example 30, the subject matter of Examples 27-33 (excluding thepresent Example), can optionally include wherein the linked-listinterlineation logic means is further configured for reading from thememory, the subsequent set of data of the sequence of linked-listentries, and remaining data of the initial set of data, and the datareplacement logic means is further configured for replacing thesubsequent set of data with the first pattern of data, to restore theinitial set of data to provide a restored initial set of data.

In Example 31, the subject matter of Examples 27-33 (excluding thepresent Example), can optionally include wherein the linked-listinterlineation logic means configured for reading from the memory, thesubsequent set of data of the sequence of linked-list entries, isfurther configured for:

reading location data stored in a pointer location field of the firstlinked-list entry to identify the location of the second,next-in-sequence linked-list entry of the sequence of linked-listentries within the memory,

reading payload data stored in a payload field of an entry of thesequence of linked-list entries,

reading entry error correction code data stored in a header field ineach of the first linked-list entry and the second, next-in-sequenceentry, and

reading sequence length data in a sequence length field and determinebased upon the sequence length data whether a complete sequence oflinked-list entries has been read from the memory, and

wherein the error correction code logic means configured for detectingand correcting storage errors in the subsequent set of data is furtherconfigured for detecting and correcting data of the first linked-listentry and the second, next-in-sequence entry, as a function of the entryerror correction code data stored in a header field in each of the firstlinked-list entry and the second, next-in-sequence entry, respectively.

In Example 32, the subject matter of Examples 27-33 (excluding thepresent Example), can optionally include wherein the memory is anon-volatile flash memory having an erasable block of non-volatilememory, wherein the memory control logic means includes block eraselogic means configured for changing all bits of an erasable block to acommon bit state to erase an erasable block of the non-volatile flashmemory wherein an erasable block is the smallest unit of thenon-volatile memory capable of being erased at a time, wherein the firstpattern is a string of bits which are exclusively of the common bitstate, wherein the initial set of memory locations is a sector of thememory, and wherein the initial data structure fills the sector.

In Example 33, the subject matter of Examples 27-33 (excluding thepresent Example), can optionally include at least one of:

a display communicatively coupled to the processor,

a network interface communicatively coupled to the processor, and

a battery coupled to provide power to the apparatus.

The described operations may be implemented as a method, apparatus orcomputer program product using standard programming and/or engineeringtechniques to produce software, firmware, hardware, or any combinationthereof. The described operations may be implemented as computer programcode maintained in a “computer readable storage medium”, where aprocessor may read and execute the code from the computer storagereadable medium. The computer readable storage medium includes at leastone of electronic circuitry, storage materials, inorganic materials,organic materials, biological materials, a casing, a housing, a coating,and hardware. A computer readable storage medium may comprise, but isnot limited to, a magnetic storage medium (e.g., hard disk drives,floppy disks, tape, etc.), optical storage (CD-ROMs, DVDs, opticaldisks, etc.), volatile and non-volatile memory devices (e.g., EEPROMs,ROMs, PROMs, RAMs, DRAMs, SRAMs, Flash Memory, firmware, programmablelogic, etc.), Solid State Devices (SSD), etc. The code implementing thedescribed operations may further be implemented in hardware logicimplemented in a hardware device (e.g., an integrated circuit chip,Programmable Gate Array (PGA), Application Specific Integrated Circuit(ASIC), etc.). Still further, the code implementing the describedoperations may be implemented in “transmission signals”, wheretransmission signals may propagate through space or through atransmission media, such as an optical fiber, copper wire, etc. Thetransmission signals in which the code or logic is encoded may furthercomprise a wireless signal, satellite transmission, radio waves,infrared signals, Bluetooth, etc. The program code embedded on acomputer readable storage medium may be transmitted as transmissionsignals from a transmitting station or computer to a receiving stationor computer. A computer readable storage medium is not comprised solelyof transmissions signals. Those skilled in the art will recognize thatmany modifications may be made to this configuration without departingfrom the scope of the present description, and that the article ofmanufacture may comprise suitable information bearing medium known inthe art. Of course, those skilled in the art will recognize that manymodifications may be made to this configuration without departing fromthe scope of the present description, and that the article ofmanufacture may comprise any tangible information bearing medium knownin the art.

In certain applications, a device in accordance with the presentdescription, may be embodied in a computer system including a videocontroller to render information to display on a monitor or otherdisplay coupled to the computer system, a device driver and a networkcontroller, such as a computer system comprising a desktop, workstation,server, mainframe, laptop, handheld computer, etc. Alternatively, thedevice embodiments may be embodied in a computing device that does notinclude, for example, a video controller, such as a switch, router,etc., or does not include a network controller, for example.

The illustrated logic of figures may show certain events occurring in acertain order. In alternative embodiments, certain operations may beperformed in a different order, modified or removed. Moreover,operations may be added to the above described logic and still conformto the described embodiments. Further, operations described herein mayoccur sequentially or certain operations may be processed in parallel.Yet further, operations may be performed by a single processing unit orby distributed processing units.

The foregoing description of various embodiments has been presented forthe purposes of illustration and description. It is not intended to beexhaustive or to limit to the precise form disclosed. Many modificationsand variations are possible in light of the above teaching.

What is claimed is:
 1. An apparatus, comprising: a memory having memorylocations configured to store data in data structures; and memorycontrol logic configured to control input/output operations to thememory wherein the memory control logic is further configured to storean initial set of data which includes at least a first pattern of data,in an initial data structure having an initial set of memory locationsof the memory, and wherein the memory control logic includes linked-listinterlineation logic configured to, after the memory control logicstores the initial set of data, store a subsequent set of data in alinked-list data structure within the initial data structure, thelinked-list data structure having a subset of the initial set of memorylocations and a sequence of linked-list entries stored in the subset ofthe initial set of memory locations, wherein the linked-listinterlineation logic includes pattern recognition logic configured toidentify a subset of memory locations within the initial set of memorylocations of the initial data structure, as a function of at least thefirst pattern of data wherein the memory locations of the subset ofmemory locations are interspersed with other memory locations of theinitial set of memory locations; and, data replacement logic configuredto replace the first pattern of data stored in a memory location of thesubset of memory locations with data of the subsequent set of data, tostore in the subset of memory locations, the subsequent set of data in alinked-list data structure in a sequence of linked-list entries of thelinked-list data structure.
 2. The apparatus of claim 1, wherein theinitial data structure includes an error correction code field andwherein the memory control logic includes error correction code logicconfigured to calculate for the initial set of data, first errorcorrection code data, the memory control logic being configured to storea calculated first error correction code data in the error correctioncode field of the initial data structure, the error correction codelogic being further configured to detect and correct storage errors inthe initial set of data as a function of the first error correction codedata; and wherein the error correction code logic is further configuredto calculate for the subsequent set of data, second error correctioncode data, the memory control logic being configured to store in thesequence of linked-list entries, second error correction code data afterthe first error correction code data is stored, the error correctioncode logic being further configured to detect and correct storage errorsin the subsequent set of data as a function of the second errorcorrection code data.
 3. The apparatus of claim 2 wherein thelinked-list interlineation logic includes linked-list entry generationlogic configured to generate the sequence of linked-list entries whichincludes a first linked-list entry and a second, next-in-sequence entrywith respect to the first linked-list entry of the sequence oflinked-list entries, and wherein each linked-list entry has a headerfield and wherein the data replacement logic is further configured tostore entry error correction code data of the second error correctioncode data, in a header field in each of the first linked-list entry andthe second, next-in-sequence entry; wherein the first linked-list entryhas a pointer location field and wherein the data replacement logic isfurther configured to store within the subsequent set of data, locationdata in a pointer location field of the first linked-list entry whereinthe location data points to the location of the second, next-in-sequencelinked-list entry of the sequence of linked-list entries within thememory; and wherein at least one of the first linked-list entry and thenext-in-sequence entry, has a payload field, and a sequence length fieldand wherein the data replacement logic is further configured to storewithin the subsequent set of data, payload data in a payload field, andsequence length data in a sequence length field wherein the sequencelength data identifies a total length of the sequence of linked-listentries.
 4. The apparatus of claim 3 wherein the linked-listinterlineation logic is further configured to: read from the memory, thesubsequent set of data of the sequence of linked-list entries, andremaining data of the initial set of data; and the data replacementlogic is further configured to replace the subsequent set of data withthe first pattern of data, to restore the initial set of data to providea restored initial set of data.
 5. The apparatus of claim 4 wherein thelinked-list interlineation logic configured to read from the memory, thesubsequent set of data of the sequence of linked-list entries, isfurther configured to: read location data stored in a pointer locationfield of the first linked-list entry to identify the location of thesecond, next-in-sequence linked-list entry of the sequence oflinked-list entries within the memory; read payload data stored in apayload field of an entry of the sequence of linked-list entries; readentry error correction code data stored in a header field in each of thefirst linked-list entry and the second, next-in-sequence entry; and readsequence length data in a sequence length field and determine based uponthe sequence length data whether a complete sequence of linked-listentries has been read from the memory; and wherein the error correctioncode logic configured to detect and correct storage errors in thesubsequent set of data is further configured to error detect and correctdata of the first linked-list entry and the second, next-in-sequenceentry, as a function of the entry error correction code data stored in aheader field in each of the first linked-list entry and the second,next-in-sequence entry, respectively.
 6. The apparatus of claim 1wherein the memory is a non-volatile flash memory having an erasableblock of non-volatile memory, wherein the memory control logic includesblock erase logic configured to change all bits of an erasable block toa common bit state to erase an erasable block of the non-volatile flashmemory wherein an erasable block is the smallest unit of thenon-volatile memory capable of being erased at a time, wherein the firstpattern is a string of bits which are exclusively of the common bitstate, wherein the initial set of memory locations is a sector of thememory, and wherein the initial data structure fills the sector.
 7. Theapparatus of claim 1 further comprising at least one of: a processor: adisplay communicatively coupled to the processor; a network interfacecommunicatively coupled to the processor; and a battery coupled toprovide power to the apparatus.
 8. A method, comprising: storing aninitial set of data in an initial data structure having an initial setof memory locations of a memory; and storing a subsequent set of data ina linked-list data structure within the initial data structure, thelinked-list data structure having a subset of the initial set of memorylocations and a sequence of linked-list entries stored in the subset ofthe initial set of memory locations, the storing a subsequent set ofdata including: identifying a subset of memory locations within theinitial set of memory locations, wherein the subset of memory locationsstore a first pattern of data wherein the memory locations of the subsetof memory locations are interspersed with other memory locations of theinitial set of memory locations storing the initial set of data; andreplacing the first pattern of data stored in a memory location of thesubset of memory locations with data of the subsequent set of data, saidreplacing including storing in the subset of memory locations, thesubsequent set of data in a linked-list data structure in a sequence oflinked-list entries of the linked-list data structure.
 9. The method ofclaim 8, wherein the storing an initial set of data includes storingfirst error correction code data configured for detecting and correctingstorage errors in the initial set of data; and wherein the storing asubsequent set of data includes storing second error correction codedata after storing the initial set of data including the first errorcorrection code data, the second error correction code data beingconfigured for detecting and correcting storage errors in the subsequentset of data.
 10. The method of claim 9 wherein the sequence oflinked-list entries includes a first linked-list entry and a second,next-in-sequence entry with respect to the first linked-list entry ofthe sequence of linked-list entries, and wherein storing second errorcorrection code data includes storing entry error correction code datain a header field in each of the first linked-list entry and the second,next-in-sequence entry.
 11. The method of claim 10 wherein the storing asubsequent set of data includes storing location data in a pointerlocation field of the first linked-list entry wherein the location datapoints to the location of the second, next-in-sequence linked-list entryof the sequence of linked-list entries within the memory.
 12. The methodof claim 11 wherein the storing a subsequent set of data includesstoring in at least one of the first linked-list entry and the second,next-in-sequence entry, payload data in a payload field, and sequencelength data in a sequence length field wherein the sequence length dataidentifies a total length of the sequence of linked-list entries. 13.The method of claim 12 further comprising: reading from the memory, thesubsequent set of data of the sequence of linked-list entries, andremaining data of the initial set of data; and restoring the initial setof data to provide a restored initial set of data, said restoringincluding replacing the sequence of linked-list entries with the firstpattern of data.
 14. The method of claim 13 further comprising errorchecking the subsequent set of data of the sequence of linked-listentries read from the memory using the second error correction codedata; and error checking the restored initial set of data read using thefirst error correction code data.
 15. The method of claim 14 wherein thereading from the memory, the subsequent set of data of the sequence oflinked-list entries, includes: reading location data stored in a pointerlocation field of the first linked-list entry to identify the locationof the second, next-in-sequence linked-list entry of the sequence oflinked-list entries within the memory; reading payload data stored in apayload field of an entry of the sequence of linked-list entries;reading entry error correction code data stored in a header field ineach of the first linked-list entry and the second, next-in-sequenceentry; and reading sequence length data in a sequence length field anddetermining based upon the sequence length data whether a completesequence of linked-list entries has been read from the memory; andwherein the error checking the subsequent set of data of the sequence oflinked-list entries read from the memory using the second errorcorrection code data, includes error checking data of the firstlinked-list entry and the second, next-in-sequence entry, using theentry error correction code data stored in a header field in each of thefirst linked-list entry and the second, next-in-sequence entry,respectively.
 16. The method of claim 8 wherein the memory is anon-volatile flash memory having an erasable block of non-volatilememory wherein the erasable block is the smallest unit of thenon-volatile memory capable of being erased at a time, the methodfurther comprising erasing a block of the non-volatile flash memory, theerasing including changing all bits of the block being erased to acommon bit state wherein the first pattern is a string of bits which areexclusively of the common bit state, wherein the initial set of memorylocations is a sector of the memory, and wherein the initial set of datafills the sector.
 17. A computer program product for use with a memoryhaving memory locations configured to store data in data structures,wherein the computer program product comprises a computer readablestorage medium having program instructions embodied therewith, theprogram instructions executable by a processor to cause processoroperations, the processor operations comprising: controllinginput/output operations to the memory including storing an initial setof data which includes at least a first pattern of data, in an initialdata structure having an initial set of memory locations of the memory:and after storing the initial set of data, storing a subsequent set ofdata in a linked-list data structure within the initial data structure,the linked-list data structure having a subset of the initial set ofmemory locations and a sequence of linked-list entries stored in thesubset of the initial set of memory locations, wherein storing asubsequent set of data includes: identifying a subset of memorylocations within the initial set of memory locations of the initial datastructure, as a function of at least the first pattern of data whereinthe memory locations of the subset of memory locations are interspersedwith other memory locations of the initial set of memory locations; and,replacing the first pattern of data stored in a memory location of thesubset of memory locations with data of the subsequent set of data, tostore in the subset of memory locations, the subsequent set of data in alinked-list data structure in a sequence of linked-list entries of thelinked-list data structure.
 18. The computer program product of claim17, wherein the initial data structure includes an error correction codefield and wherein storing an initial set of data further includescalculating for the initial set of data, first error correction codedata, and storing a calculated first error correction code data in theerror correction code field of the initial data structure; and whereinstoring a subsequent set of data further includes calculating for thesubsequent set of data, second error correction code data, and storingin the sequence of linked-list entries, second error correction codedata after the first error correction code data is stored; and whereinthe processor operations further comprise detecting and correctingstorage errors in the initial set of data as a function of the firsterror correction code data; and detecting and correcting storage errorsin the subsequent set of data as a function of the second errorcorrection code data.
 19. The computer program product of claim 18wherein storing a subsequent set of data further includes generating thesequence of linked-list entries which includes a first linked-list entryand a second, next-in-sequence entry with respect to the firstlinked-list entry of the sequence of linked-list entries, and whereineach linked-list entry has a header field and wherein replacing thefirst pattern of data includes storing entry error correction code dataof the second error correction code data, in a header field in each ofthe first linked-list entry and the second, next-in-sequence entry. 20.The computer program product of claim 19 wherein the first linked-listentry has a pointer location field and wherein replacing the firstpattern of data includes storing within the subsequent set of data,location data in a pointer location field of the first linked-list entrywherein the location data points to the location of the second,next-in-sequence linked-list entry of the sequence of linked-listentries within the memory.
 21. The computer program product of claim 20wherein at least one of the first linked-list entry and thenext-in-sequence entry, has a payload field, and a sequence length fieldand wherein replacing the first pattern of data includes storing withinthe subsequent set of data, payload data in a payload field, andsequence length data in a sequence length field wherein the sequencelength data identifies a total length of the sequence of linked-listentries.
 22. The computer program product of claim 21 wherein theprocessor operations further comprise reading from the memory, thesubsequent set of data of the sequence of linked-list entries, andremaining data of the initial set of data; and replacing the subsequentset of data with the first pattern of data, to restore the initial setof data to provide a restored initial set of data.
 23. The computerprogram product of claim 22 wherein the reading from the memory, thesubsequent set of data of the sequence of linked-list entries furtherincludes: reading location data stored in a pointer location field ofthe first linked-list entry to identify the location of the second,next-in-sequence linked-list entry of the sequence of linked-listentries within the memory; reading payload data stored in a payloadfield of an entry of the sequence of linked-list entries; and readingentry error correction code data stored in a header field in each of thefirst linked-list entry and the second, next-in-sequence entry.
 24. Thecomputer program product of claim 23 wherein detecting and correctingstorage errors in the subsequent set of data further includes detectingand correcting data of the first linked-list entry and the second,next-in-sequence entry, as a function of the entry error correction codedata stored in a header field in each of the first linked-list entry andthe second, next-in-sequence entry, respectively.
 25. The computerprogram product of claim 17 wherein the memory is a non-volatile flashmemory having an erasable block of non-volatile memory, and wherein theprocessor operations further comprise changing all bits of an erasableblock to a common bit state to erase an erasable block of thenon-volatile flash memory wherein an erasable block is the smallest unitof the non-volatile memory capable of being erased at a time, whereinthe first pattern is a string of bits which are exclusively of thecommon bit state, wherein the initial set of memory locations is asector of the memory, and wherein the initial data structure fills thesector.